package com.ruoyi.system.mapper;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.system.bo.ZsyyCouponQueryBo;
import com.ruoyi.system.domain.ZsyyCoupon;
import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus;
import com.ruoyi.common.core.mybatisplus.cache.MybatisPlusRedisCache;
import com.ruoyi.system.dto.CouponAndUser;
import com.ruoyi.system.dto.CouponByParkCarDTO;
import com.ruoyi.system.dto.CouponByParkCodeDTO;
import com.ruoyi.system.dto.CouponDTO;
import com.ruoyi.system.model.KVModel;
import com.ruoyi.system.vo.ZsyyCouponVo;
import org.apache.ibatis.annotations.CacheNamespace;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.Date;
import java.util.List;

/**
 * 优惠券管理Mapper接口
 *
 * @author wangghua
 * @date 2021-07-14
 */
// 如使需切换数据源 请勿使用缓存 会造成数据不一致现象
//@CacheNamespace(implementation = MybatisPlusRedisCache.class, eviction = MybatisPlusRedisCache.class)
public interface ZsyyCouponMapper extends BaseMapperPlus<ZsyyCoupon> {

    List<CouponDTO> getActiveCoupons();

	List<KVModel<Long, Long>> getUserCouponsCount(@Param("userId") Long userId, @Param("couponIds") List<Long> couponIds);

	//    获取商家优惠卷
	List<CouponAndUser> getUserCourse(Long userId, Integer isType, Integer status);

	//根据车牌获取优惠卷
	List<CouponByParkCarDTO> getCouponByParkCar(@Param("parkCar") String parkCar,@Param("parkCode") String parkCode);

	//   根据停车场获取优惠卷
	List<CouponByParkCodeDTO> getCouponByParkCode(@Param("parkCode")String parkCode);

	//使用优惠券
	void useCoupon(@Param("id") Integer id,@Param("gmtUsed") Date gmtUsed,@Param("updatetime") Date updatetime);

	//减少优惠券剩余数量
	void decCoupon(@Param("couponId")Long couponId);

    Page<ZsyyCouponVo> queryPageList(@Param("page")Page<ZsyyCouponVo> buildPage, @Param("query")ZsyyCouponQueryBo bo);
}
